package com.iqiyi.pps.epg.core.service.base;

import com.iqiyi.pps.epg.core.dao.base.BaseDao;
import com.iqiyi.pps.epg.core.dao.base.Page;
import com.iqiyi.pps.epg.core.dao.base.PropertyFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 基础管理类
 * User: liqingqiang
 */
@Component
@Transactional
public class BaseManager<T> {
    @Autowired
    private BaseDao<T> baseDao;

    /**
     * 保存实体
     * @param entity 实体
     */
    public boolean save(final T entity) {
        baseDao.save(entity);
        return true;
    }

    /**
     * 删除实体
     * @param entity 实体
     */
    public boolean del(final T entity) {
        baseDao.delete(entity);
        return true;
    }

    /**
     * 根据主键删除
     * @param id 主键
     */
    public boolean del(final Long id) {
        baseDao.delete(id);
        return true;
    }

    /**
     * 获取实体
     * @param id 主键
     */
    @Transactional(readOnly = true)
    public T get(final Long id) {
        return baseDao.get(id);
    }

    /**
     * 根据过滤条件查询实体列表
     * @param page Page对象
     * @param filters 过滤条件
     * @return Page<T>
     */
    @Transactional(readOnly = true)
    public Page<T> search(final Page<T> page, final List<PropertyFilter> filters) {
        return baseDao.findPage(page, filters);
    }
}
